# 抖码算法，让算法学习变得简单有趣
# 作者：老汤
import sys

data = str(input()).split(" ")
m, n, R = int(data[0]), int(data[1]), int(data[2])

data = str(input()).split(" ")
A = [0] * m
for i in range(m):
    A[i] = int(data[i])

data = str(input()).split(" ")
B = [0] * n
for i in range(n):
    B[i] = int(data[i])

# 时间复杂度为 O(mn)，不符合题意，因为题目的输入数据规模为 1 <= n, m <= 100000
# 如果时间复杂度为 O(mn) 的话，这个算法会超时
# 对于时间复杂度和输入数据规模的关系，请参考课程 B【刷题篇第 0 天：刷题前准备】 第 5 小节：https://yjs.xet.tech/s/4v36e1
# 遍历 A 中每一个元素
for i in range(m):
    ai, min_dis = A[i], sys.maxsize
    # 这里将 bj 设置为一个不可能的值，因为 bj 最大值为 1000000000，所以设置为 1000000001
    bj = 1000000001
    # 针对 A 中的每个元素，再遍历 B 的每个元素
    for j in range(n):
        b = B[j]
        # 找到符合：① Ai <= Bj 且 ② Ai、Bj 之间的距离小于等于 R
        if ai <= b and abs(ai - b) <= R:
            # 得到距离最近的 Bj
            if abs(i - j) < min_dis:
                min_dis = abs(i - j)
                bj = b
    if min_dis != sys.maxsize:
        print(str(ai) + " " + str(bj))
